from typing import List

# 整数加变量
a = 10
b = 20
print(a + b)
# 字符串
Hello = "你好"
message = "字符串"
print(message)
# 浮点数
c = 3.221
print(c)
# 布尔值
is_active = True
print(is_active)
# 计数器
sum_res = a + b  # 加法
diff_res = a - b  # 减法
mul_res = a * b  # 乘法
div_res = a / b  # 除法（返回浮点数）
mod_res = a % b  # 取余
print(sum_res)
print(diff_res)
print(mul_res)
print(div_res)
print(mod_res)

# if判断
age = 18
if age >= 18:
    print("成年人")
elif age >= 13:
    print("青少年")
else:
    print("儿童")
print("====for===")
# for循环
for i in range(10):
    if i % 2 == 0:
        print(i)
print("====while====")
# while 循环
count = 0
while count < 5:
    print(count)
    count += 1

print("====函数====")


# 函数 参数不是唯一的 就算上面定义重复的变量的参数 也照样能用
def greet(name):
    return "Hello , " + name


print(greet("Michael"))


def sum_sum(num1, num2):
    return num1 + num2


print(sum_sum(3, 4))

print(" ====列表（List）====")
# List (列表) 相当于java ArrayList集合
fruits__list = ["copy", "apple", "banana", "cherry"]
fruits__list.append("orange")  # 添加元素
fruits__list.remove("orange")  # 删除元素
print(fruits__list[0])  # 获取第一个元素
print(fruits__list.sort())  # 对列表排序 如果已经排序号就是 None
print(fruits__list)

# 列表for循环遍历
for fruits_ in fruits__list:
    print(fruits_)

print("===字典{}===")
# 字典Dictionary 相当于 java 的 哈希集合
person = {"name": "Jay", "age": 18}
# 这两者相同
print(person["name"])
print(person.get("name"))
person.pop("name")  # 删除name元素
print(person)
for i, person in enumerate(person):
    print(i, person)
print("====元组()====")
# 元组相当于Java 的 数组
coordinates = (10, 20)
for coordinate in coordinates:
    print(coordinate)

print("===集合{}===")
# 集合 Set 相当于 java 中的 HashSet
numbers = {1, 2, 3, 1}
numbers.add(6)  # 添加元素
numbers.remove(6)  # 删除 如果不存在，会抛出错误
numbers.discard(6)  # 移除但不会抛出错误
print(numbers)

for e in set([1, 2, 3]):
    print(e)


def combine(self, n: int, k: int) -> List[List[int]]:
    res = []

    def backtrack(start, path):
        if len(path) == k:
            res.append(path)
            return
        for i in range(start, n):
            path.append(i)
            backtrack(start + 1, path)
            path.pop()
    backtrack(1,[])
    return res
